package br.com.fatecjp.pooai.gerenciador.taxi.message.parser;

import br.com.fatecjp.pooai.gerenciador.taxi.ambiente.Posicao;
import br.com.fatecjp.pooai.gerenciador.taxi.message.ConteudoMensagemAgente;

public class RequisicaoSolicitacaoTaxiParser extends
		ConteudoMensagemAgenteParser {

	public boolean hasComplemento() {
		return true;
	}

	public String converterComplemento(ConteudoMensagemAgente source) {

		String complemento = null;

		if (source.getConteudo() != null && source.getConteudo().length > 0) {
			Object posicaoClienteObj = source.getConteudo()[0];
			if (posicaoClienteObj != null) {
				Posicao posicao = (Posicao) posicaoClienteObj;
				complemento = posicao.getX() + SEPARADOR + posicao.getY()
						+ SEPARADOR;
			}
			Object destinoObj = source.getConteudo()[1];
			if (destinoObj != null) {
				Posicao destino = (Posicao) destinoObj;
				complemento += destino.getX() + SEPARADOR + destino.getY()
						+ SEPARADOR;
			}
		}

		return complemento;

	}

	public Object[] extrairComplemento(String[] partes) {

		Object[] complemento = null;

		if (partes != null && partes.length > 0) {

			Integer posicaoXCliente = null;
			try {
				posicaoXCliente = new Integer(partes[0]);
			} catch (NumberFormatException ex) {
				throw new IllegalArgumentException(ex);
			}

			Integer posicaoYCliente = null;
			try {
				posicaoYCliente = new Integer(partes[1]);
			} catch (NumberFormatException ex) {
				throw new IllegalArgumentException(ex);
			}

			Integer destinoX = null;
			try {
				destinoX = new Integer(partes[2]);
			} catch (NumberFormatException ex) {
				throw new IllegalArgumentException(ex);
			}

			Integer destinoY = null;
			try {
				destinoY = new Integer(partes[3]);
			} catch (NumberFormatException ex) {
				throw new IllegalArgumentException(ex);
			}

			complemento = new Object[] {
					new Posicao(posicaoXCliente.intValue(),
							posicaoYCliente.intValue()),
					new Posicao(destinoX.intValue(), destinoY.intValue()) };

		}

		return complemento;

	}

}
